home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-16 | 8.1 KB | 261 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWScrolr.h
- // Release Version: $ ODF 1 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef FWSCROLR_H
- #define FWSCROLR_H
-
- #ifndef FWSVIEW_H
- #include "FWSView.h"
- #endif
-
- // ----- OS Layer -----
-
- #ifndef FWPOINT_H
- #include "FWPoint.h"
- #endif
-
- // ----- Foundation Layer -----
-
- #ifndef FWRECEVR_H
- #include "FWRecevr.h"
- #endif
-
- //========================================================================================
- // Forward declarations
- //========================================================================================
-
- class FW_CPoint;
- class FW_CFrame;
- class FW_CScrollBar;
- class ODFacet;
-
- //========================================================================================
- // CLASS FW_CPrivBaseScroller
- //========================================================================================
- // This class is only here for better dead-stripping. Because FW_CFrame calls UpdateScrollParameters
- // and I don't want the whole FW_CScroller class to be dragged in I am in fact using this class
- // in FW_CFrame
-
- class FW_CPrivBaseScroller
- {
- public:
- FW_DECLARE_CLASS
-
- FW_CPrivBaseScroller();
- virtual ~FW_CPrivBaseScroller();
-
- public:
- virtual void InitializeAutoScroll(Environment* ev) = 0;
- virtual FW_CPoint AutoScrollOffset(Environment* ev,
- const FW_CPoint& currentPoint,
- unsigned long delay = 0) = 0;
- virtual void ScrollBy(Environment* ev,
- const FW_CPoint& offset,
- FW_CGraphicContext* gc = NULL) = 0;
-
- virtual void UpdateScrollParameters(Environment* ev, FW_Boolean notify = TRUE) = 0;
-
- // ----- Archiving -----
- static void* Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
- static void Destroy(void* object, FW_ClassTypeConstant type);
- static void Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
- static void Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
-
- #ifdef FW_DEBUG
- public:
- virtual void PrivCheckFrame(Environment* ev) const;
- #endif
- };
-
- //========================================================================================
- // CLASS FW_CScroller
- //========================================================================================
-
- class FW_CScroller : public FW_CPrivBaseScroller, public FW_MReceiver
- {
- public:
- FW_DECLARE_CLASS
- FW_DECLARE_AUTO(FW_CScroller)
-
- enum EAutoScrollStage
- {
- kOutStage = 0,
- kDelayStage = 1,
- kScrollStage = 2
- };
-
- // ----- Constructors/Destructors
- public:
- FW_CScroller(Environment* ev, FW_CFrame* frame);
- virtual ~FW_CScroller();
-
- protected:
- FW_CScroller(Environment* ev);
-
- public:
- // ----- Notification -----
-
- void RegisterScrollNotifier(Environment* ev,
- FW_MNotifier* notifier);
- void UnregisterScrollNotifier(Environment* ev,
- FW_MNotifier* notifier);
- virtual void HandleNotification(Environment* ev,
- const FW_CNotification& notification);
-
- // ----- Srolling/Scalling -----
- void ScaleBy(Environment* ev,
- const FW_CPoint& scaling,
- FW_CGraphicContext* gc = NULL);
- virtual void ScrollBy(Environment* ev,
- const FW_CPoint& offset,
- FW_CGraphicContext* gc = NULL);
-
- // ----- AutoScrolll -----
- virtual void InitializeAutoScroll(Environment* ev);
- virtual FW_CPoint AutoScrollOffset(Environment* ev,
- const FW_CPoint& currentPoint,
- unsigned long delay = 0);
- void AutoScroll(Environment* ev,
- const FW_CPoint& previousPoint,
- FW_CGraphicContext* gc = NULL,
- unsigned long delay = 0);
- void SetAutoScrollIncrement(Environment* ev,
- const FW_CPoint& increment);
- void SetAutoScrollInset(Environment* ev,
- FW_Fixed inset);
-
-
- // ----- Scroll Parameters -----
- virtual void UpdateScrollParameters(Environment* ev,
- FW_Boolean notify = TRUE);
- virtual void ScrollPositionChanged(Environment* ev);
-
- virtual void GetScrollUnits(Environment* ev,
- FW_Fixed& minor,
- FW_Fixed& major,
- FW_XYSelector direction);
-
- // ----- Archiving -----
- static void* Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
- static void Destroy(void* object, FW_ClassTypeConstant type);
- static void Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
- static void Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
-
- virtual void Flatten(Environment*ev, FW_CWritableStream& stream) const;
- virtual void InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
-
- protected:
- void ScrollDraw(Environment* ev,
- ODFacet* facet,
- const FW_CPoint& by);
-
- void PrivChangeOffset(Environment* ev,
- const FW_CPoint& offset,
- FW_Boolean scroll = TRUE);
- ODShape* PrivAcquireContentScrollShape(Environment* ev,
- FW_Boolean horizontalScroll,
- FW_Boolean verticalScroll) const;
-
- void PrivScrollBy(Environment* ev, const FW_CPoint& offset, FW_CGraphicContext* gc);
-
- protected:
- FW_CFrame* fFrame;
- FW_CPoint fAutoScrollIncrement;
- FW_Fixed fAutoScrollInset;
-
- private:
- EAutoScrollStage fAutoScrollStage;
- unsigned long fLastAutoScrollTick;
- };
-
- //========================================================================================
- // CLASS FW_CScrollBarScroller
- //========================================================================================
-
- class FW_CScrollBarScroller : public FW_CScroller
- {
- public:
- FW_DECLARE_CLASS
- FW_DECLARE_AUTO(FW_CScrollBarScroller)
-
- // ----- Constructors/Destructors
- public:
- FW_CScrollBarScroller(Environment* ev,
- FW_CFrame* frame,
- FW_CScrollBar* horzSB,
- FW_CScrollBar* vertSB);
- virtual ~FW_CScrollBarScroller();
-
- protected:
- FW_CScrollBarScroller(Environment* ev);
-
- public:
- virtual void UpdateScrollParameters(Environment* ev,
- FW_Boolean notify = TRUE);
- virtual void ScrollPositionChanged(Environment* ev);
-
- FW_CScrollBar* GetScrollBar(Environment* ev, FW_XYSelector direction) const;
- virtual void RemoveScrollBar(Environment* ev, FW_XYSelector direction);
-
- // ----- Archiving -----
- static void* Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
- static void Destroy(void* object, FW_ClassTypeConstant type);
- virtual void Flatten(Environment*ev, FW_CWritableStream& stream) const;
- virtual void InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
-
- #ifdef FW_DEBUG
- public:
- virtual void PrivCheckFrame(Environment* ev) const;
- #endif
-
- protected:
- FW_Boolean PrivAdjustScrollBar(Environment* ev,
- FW_XYSelector direction,
- FW_Fixed visibleContent,
- FW_Fixed contentExtent,
- FW_Fixed contentOffset,
- FW_Boolean notify);
-
- private:
- FW_CScrollBar* fScrollbars[2];
- };
-
- //========================================================================================
- // Inlines
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CScrollBarScroller::FW_CScrollBarScroller
- //----------------------------------------------------------------------------------------
-
- inline FW_CScrollBar* FW_CScrollBarScroller::GetScrollBar(Environment*, FW_XYSelector direction) const
- {
- return fScrollbars[direction];
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CScrollBarScroller::SetAutoScrollIncrement
- //----------------------------------------------------------------------------------------
-
- inline void FW_CScroller::SetAutoScrollIncrement(Environment*, const FW_CPoint& increment)
- {
- fAutoScrollIncrement = increment;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CScrollBarScroller::SetAutoScrollInset
- //----------------------------------------------------------------------------------------
-
- inline void FW_CScroller::SetAutoScrollInset(Environment*, FW_Fixed inset)
- {
- fAutoScrollInset = inset;
- }
-
- #endif
-